package com.xbongbong.paas.service;

import com.xbongbong.paas.pojo.dto.CallSearchItemsDTO;
import com.xbongbong.paas.pojo.dto.CallTaskLogBatchDeleteDTO;
import com.xbongbong.paas.pojo.dto.CallTaskLogCountDTO;
import com.xbongbong.paas.pojo.dto.CallTaskLogDeleteDTO;
import com.xbongbong.paas.pojo.dto.CallTaskLogFindNextPhoneDTO;
import com.xbongbong.paas.pojo.dto.CallTaskLogListDTO;
import com.xbongbong.paas.pojo.dto.CallTaskSaveDTO;
import com.xbongbong.paas.pojo.dto.FeeRemainDTO;
import com.xbongbong.paas.pojo.vo.CallSearchItemsVO;
import com.xbongbong.paas.pojo.vo.CallTaskLogBatchDeleteVO;
import com.xbongbong.paas.pojo.vo.CallTaskLogCountListVO;
import com.xbongbong.paas.pojo.vo.CallTaskLogCountVO;
import com.xbongbong.paas.pojo.vo.CallTaskLogDeleteVO;
import com.xbongbong.paas.pojo.vo.CallTaskLogFindNextPhoneVO;
import com.xbongbong.paas.pojo.vo.CallTaskLogVO;
import com.xbongbong.paas.pojo.vo.FeeRemainVO;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.XbbResponse;

import java.util.List;

/**
 * @author youli.chen
 * @version v1.0
 * @description: 呼叫中心批量外呼计划日志业务层
 * @date 2019/2/23 16:42
 * @since v1.0
 */
public interface XbbCallTaskLogService {

    /**
     * 批量新增外呼日志
     *
     * @param corpid          公司ID
     * @param callTaskId      呼叫中心批量外呼计划ID
     * @param callTaskSaveDTO 呼叫中心批量外呼计划
     * @throws XbbException 销帮帮设定的异常
     */
    void batchSave(String corpid, Long callTaskId, CallTaskSaveDTO callTaskSaveDTO) throws XbbException;

    /**
     * 业务层 获取每个通话状态对应的总条数
     *
     * @param callTaskLogCountDTO 获取每个通话状态对应的总条数入参
     * @return CallTaskLogCountVO 批量外呼每个通话状态对应的总条数 API 返回数据
     * @throws XbbException 销帮帮设定的异常
     */
    XbbResponse<CallTaskLogCountVO> countStatusByTaskId(CallTaskLogCountDTO callTaskLogCountDTO) throws XbbException;

    /**
     * 业务层 获取每个通话状态对应的总条数列表
     *
     * @param corpid      公司ID
     * @param callTaskIds 呼叫中心批量外呼计划ID队列
     * @return CallTaskLogCountListVO 批量外呼每个通话状态对应的总条数 API 列表返回数据
     * @throws XbbException 销帮帮设定的异常
     */
    CallTaskLogCountListVO countStatusListByTaskIds(String corpid, List<Long> callTaskIds) throws XbbException;

    /**
     * 业务层 获取剩余批量外呼条数
     *
     * @param feeRemainDTO 获取剩余批量外呼条数入参
     * @return FeeRemainVO 获取剩余批量外呼条数 返回数据
     * @throws XbbException 销帮帮设定的异常
     */
    FeeRemainVO getRemain(FeeRemainDTO feeRemainDTO) throws XbbException;

    /**
     * 根据条件查找符合的列表
     *
     * @param callTaskLogListDTO 根据条件查找符合的列表
     * @return CallTaskLogVO  符合的批量外呼任务日志列表
     * @throws XbbException
     */
    CallTaskLogVO findDetails(CallTaskLogListDTO callTaskLogListDTO) throws XbbException;

    /**
     * 批量外呼计划日志单个删除
     *
     * @param callTaskLogDeleteDTO 批量外呼计划日志单个删除入参
     * @return CallTaskLogDeleteVO 批量外呼计划日志单个删除回参
     * @throws XbbException 销帮帮设定的异常
     * @author youli.chen
     * @version v1.0
     * @since v1.0
     */
    XbbResponse<CallTaskLogDeleteVO> delete(CallTaskLogDeleteDTO callTaskLogDeleteDTO) throws XbbException;

    /**
     * 批量删除(结束上一次的批量外呼任务)
     *
     * @param callTaskLogBatchDeleteDTO 批量删除(结束上一次的批量外呼任务)入参
     * @return CallTaskLogBatchDeleteVO 批量删除(结束上一次的批量外呼任务)回参
     * @throws XbbException 销帮帮设定的异常
     * @author youli.chen
     * @version v1.0
     * @since v1.0
     */
    XbbResponse<CallTaskLogBatchDeleteVO> batchDelete(CallTaskLogBatchDeleteDTO callTaskLogBatchDeleteDTO) throws XbbException;

    /**
     * 获取下一个需要拨打的号码(模糊查询出号码明文)
     *
     * @param callTaskLogFindNextPhoneDTO 获取下一个需要拨打的号码(模糊查询出号码明文)入参
     * @return CallTaskLogFindNextPhoneVO 获取下一个需要拨打的号码(模糊查询出号码明文)回参
     * @throws XbbException 销帮帮设定的异常
     * @author youli.chen
     * @version v1.0
     * @since v1.0
     */
    XbbResponse<CallTaskLogFindNextPhoneVO> findNextPhone(CallTaskLogFindNextPhoneDTO callTaskLogFindNextPhoneDTO) throws XbbException;

    /**
     * 客户状态筛选
     *
     * @param callSearchItemsDTO 客户状态筛选入参
     * @return CallSearchItemsVO 客户状态筛选回参
     * @throws XbbException 销帮帮设定的异常
     * @author youli.chen
     * @version v1.0
     * @since v1.0
     */
    XbbResponse<CallSearchItemsVO> searchItems(CallSearchItemsDTO callSearchItemsDTO) throws XbbException;

}
